package cn.kgc.util;

import cn.hutool.core.codec.Base64Decoder;
import cn.kgc.base.entity.LoginUserInfo;
import cn.kgc.commons.constant.SystemConstant;


import cn.kgc.constant.AuthorityCenterConstant;
import com.alibaba.fastjson.JSON;
import io.jsonwebtoken.Jwts;

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Date;
import java.util.UUID;

/**
 * <p>Jwt工具类</p>
 *
 * @author 王跃
 */
public class JwtUtil {
    /**
     * 生成令牌
     * @param userInfo  用户信息
     * @param date  过期时间
     * @return  令牌信息
     * @throws Exception
     */
    public static String generateToken(LoginUserInfo userInfo, Date date)throws Exception{
        String jsonString= Jwts.builder()
                .claim(SystemConstant.JWT_USER_INFO_KEY,
                        JSON.toJSONString(userInfo))
                .setExpiration(date)
                .setId(UUID.randomUUID().toString())
                .signWith(getPrivetKey())
                .compact();
        return jsonString;
    }

    /**
     * 获得私钥对应的类的对象
     * @return
     */
    private static PrivateKey getPrivetKey()throws  Exception{
        //获得key工厂
        KeyFactory keyFactory=KeyFactory.getInstance("RSA");
        //将私钥进行解码,封装到keySpec对象中
        PKCS8EncodedKeySpec keySpec=
                new PKCS8EncodedKeySpec(Base64Decoder.decode(AuthorityCenterConstant.PRIVATE_KEY));
        //生成私钥
        return   keyFactory.generatePrivate(keySpec);
    }

}
